package arithmetic.leetCode.yi;

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * <p>
 * 给定长度为 n 的整数数组 nums，其中 n > 1，返回输出数组 output ，其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
 * <p>
 * 示例:
 * <p>
 * 输入: [1,2,3,4]
 * 输出: [24,12,8,6]
 * User: yilin
 * Date: 2019-07-30
 * Time: 15:54
 * sulution：乘积 = 当前数左边的乘积 * 当前数右边的乘积
 */
public class ProductSelf {

    public static void main(String[] args) {

        Arrays.stream(productExceptSelf(new int[]{1, 2, 3, 4})).forEach(e -> System.out.println(e));

    }

    public static int[] productExceptSelf(int[] nums) {
        int key = 1;
        int res[] = new int[nums.length];
        for (int i = 0; i < res.length; i++) {
            res[i] = key;
            key *= nums[i]; // 此时数组存储的是除去当前元素左边的元素乘积
        }
        key = 1;
        for (int i = nums.length - 1; i >= 0; i--) {
            res[i] *= key;// k为该数右边的乘积。
            key *= nums[i];// 此时数组等于左边的 * 该数右边的。
        }

        return res;
    }

}
